home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / OLE / PPS.php < prev   
PHP Script  |  2003-12-14  |  7KB  |  220 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2002 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Author: Xavier Noguer <xnoguer@php.net>                              |
  17. // | Based on OLE::Storage_Lite by Kawai, Takanori                        |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: PPS.php,v 1.5 2003/12/14 18:12:28 xnoguer Exp $
  21.  
  22.  
  23. require_once('PEAR.php');
  24. require_once('OLE.php');
  25.  
  26. /**
  27. * Class for creating PPS's for OLE containers
  28. *
  29. * @author   Xavier Noguer <xnoguer@php.net>
  30. * @category Structures
  31. * @package  OLE
  32. */
  33. class OLE_PPS extends PEAR
  34. {
  35.     /**
  36.     * The PPS index
  37.     * @var integer
  38.     */
  39.     var $No;
  40.  
  41.     /**
  42.     * The PPS name (in Unicode)
  43.     * @var string
  44.     */
  45.     var $Name;
  46.  
  47.     /**
  48.     * The PPS type. Dir, Root or File
  49.     * @var integer
  50.     */
  51.     var $Type;
  52.  
  53.     /**
  54.     * The index of the previous PPS
  55.     * @var integer
  56.     */
  57.     var $PrevPps;
  58.  
  59.     /**
  60.     * The index of the next PPS
  61.     * @var integer
  62.     */
  63.     var $NextPps;
  64.  
  65.     /**
  66.     * The index of it's first child if this is a Dir or Root PPS
  67.     * @var integer
  68.     */
  69.     var $DirPps;
  70.  
  71.     /**
  72.     * A timestamp
  73.     * @var integer
  74.     */
  75.     var $Time1st;
  76.  
  77.     /**
  78.     * A timestamp
  79.     * @var integer
  80.     */
  81.     var $Time2nd;
  82.  
  83.     /**
  84.     * Starting block (small or big) for this PPS's data  inside the container
  85.     * @var integer
  86.     */
  87.     var $_StartBlock;
  88.  
  89.     /**
  90.     * The size of the PPS's data (in bytes)
  91.     * @var integer
  92.     */
  93.     var $Size;
  94.  
  95.     /**
  96.     * The PPS's data (only used if it's not using a temporary file)
  97.     * @var string
  98.     */
  99.     var $_data;
  100.  
  101.     /**
  102.     * Array of child PPS's (only used by Root and Dir PPS's)
  103.     * @var array
  104.     */
  105.     var $children = array();
  106.  
  107.     /**
  108.     * The constructor
  109.     *
  110.     * @access public
  111.     * @param integer $No   The PPS index
  112.     * @param string $name  The PPS name (in Unicode)
  113.     * @param integer $type The PPS type. Dir, Root or File
  114.     * @param integer $prev The index of the previous PPS
  115.     * @param integer $next The index of the next PPS
  116.     * @param integer $dir  The index of it's first child if this is a Dir or Root PPS
  117.     * @param integer $time_1st A timestamp
  118.     * @param integer $time_2nd A timestamp
  119.     * @param array   $children Array containing children PPS for this PPS
  120.     */
  121.     function OLE_PPS($No, $name, $type, $prev, $next, $dir, $time_1st, $time_2nd, $data, $children)
  122.     {
  123.         $this->No      = $No;
  124.         $this->Name    = $name;
  125.         $this->Type    = $type;
  126.         $this->PrevPps = $prev;
  127.         $this->NextPps = $next;
  128.         $this->DirPps  = $dir;
  129.         $this->Time1st = $time_1st;
  130.         $this->Time2nd = $time_2nd;
  131.         $this->_data      = $data;
  132.         $this->children   = $children;
  133.         if ($data != '') {
  134.             $this->Size = strlen($data);
  135.         }
  136.         else {
  137.             $this->Size = 0;
  138.         }
  139.     }
  140.  
  141.     /**
  142.     * Returns the amount of data saved for this PPS
  143.     *
  144.     * @access private
  145.     * @return integer The amount of data (in bytes)
  146.     */
  147.     function _DataLen()
  148.     {
  149.         if (!isset($this->_data)) {
  150.             return 0;
  151.         }
  152.         if (isset($this->_PPS_FILE))
  153.         {
  154.             fseek($this->_PPS_FILE, 0);
  155.             $stats = fstat($this->_PPS_FILE);
  156.             return $stats[7];
  157.         }
  158.         else {
  159.             return strlen($this->_data);
  160.         }
  161.     }
  162.  
  163.     /**
  164.     * Returns a string with the PPS's WK (What is a WK?)
  165.     *
  166.     * @access private
  167.     * @return string The binary string
  168.     */
  169.     function _getPpsWk()
  170.     {
  171.         $ret = $this->Name;
  172.         for ($i = 0; $i < (64 - strlen($this->Name)); $i++) {
  173.             $ret .= "\x00";
  174.         }
  175.         $ret .= pack("v", strlen($this->Name) + 2)  // 66
  176.               . pack("c", $this->Type)              // 67
  177.               . pack("c", 0x00) //UK                // 68
  178.               . pack("V", $this->PrevPps) //Prev    // 72
  179.               . pack("V", $this->NextPps) //Next    // 76
  180.               . pack("V", $this->DirPps)  //Dir     // 80
  181.               . "\x00\x09\x02\x00"                  // 84
  182.               . "\x00\x00\x00\x00"                  // 88
  183.               . "\xc0\x00\x00\x00"                  // 92
  184.               . "\x00\x00\x00\x46"                  // 96 // Seems to be ok only for Root
  185.               . "\x00\x00\x00\x00"                  // 100
  186.               . OLE::LocalDate2OLE($this->Time1st)       // 108
  187.               . OLE::LocalDate2OLE($this->Time2nd)       // 116
  188.               . pack("V", isset($this->_StartBlock)? 
  189.                         $this->_StartBlock:0)        // 120
  190.               . pack("V", $this->Size)               // 124
  191.               . pack("V", 0);                        // 128
  192.         return $ret;
  193.     }
  194.  
  195.     /**
  196.     * Updates index and pointers to previous, next and children PPS's for this
  197.     * PPS. I don't think it'll work with Dir PPS's.
  198.     *
  199.     * @access private
  200.     * @param array &$pps_array Reference to the array of PPS's for the whole OLE
  201.     *                          container 
  202.     * @return integer          The index for this PPS
  203.     */
  204.     function _savePpsSetPnt(&$pps_array) 
  205.     {
  206.         $pps_array[count($pps_array)] = &$this;
  207.         $this->No = count($pps_array) - 1;
  208.         $this->PrevPps = 0xFFFFFFFF;
  209.         $this->NextPps = 0xFFFFFFFF;
  210.         if (count($this->children) > 0) {
  211.             $this->DirPps = $this->children[0]->_savePpsSetPnt($pps_array);
  212.         }
  213.         else {
  214.             $this->DirPps = 0xFFFFFFFF;
  215.         }
  216.         return $this->No;
  217.     }
  218. }
  219. ?>
  220.